// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.statement.SQLUnique;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../../../../ast/statement/SQLUnique.h"
#include "OracleConstraint.h"
#include "../OracleSQLObject.h"

class OracleUnique
    : virtual public SQLUnique,
      virtual public OracleConstraint,
      virtual public OracleSQLObject
{
public:
  OracleUsingIndexClause_ptr using_;
  SQLName_ptr exceptionsInto;
  OracleConstraint_Initially_ptr initially;
  BOOL_ptr deferrable;

  SHAREDOBJECT(OracleUnique);
  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(OracleASTVisitor_ptr visitor);

  BOOL_ptr getDeferrable();

  void setDeferrable(BOOL_ptr deferrable);

  SQLName_ptr getExceptionsInto();

  void setExceptionsInto(SQLName_ptr exceptionsInto);

  OracleUsingIndexClause_ptr getUsing();

  void setUsing(OracleUsingIndexClause_ptr using_);

  OracleConstraint_Initially_ptr getInitially();

  void setInitially(OracleConstraint_Initially_ptr initially);

  void cloneTo(OracleUnique_ptr x);

  SQLObject_ptr clone();
};
